package com.example.circuitbreaker.demo;

import java.util.concurrent.Callable;

/**
 * 类描述:     [一句话描述该类的功能]
 * 项目名：    circuitbreaker
 * 项目包名：  com.example.circuitbreaker.demo
 * 创建人:     方豪   
 * 创建时间:   2021/4/2 18:33  
 * 版本:      [v1.0]   
 */
public class CircuitBreakerRunner {

    /**
     * 执行任务
     * @return
     * @throws Exception
     */
    public static Object run(Callable callable, CircuitBreaker circuitBreaker){
        Object result = null;
        if(circuitBreaker.allowExecute()){
            try {
                result = callable.call();
            }catch (Exception e){
                circuitBreaker.getFailCount().incrementAndGet();
            }finally {
                circuitBreaker.getTotalCount().incrementAndGet();
                System.out.println("一共执行"+circuitBreaker.getTotalCount().get()+"次，失败了"+circuitBreaker.getFailCount().get()+"次");
            }
        }else {
            circuitBreaker.fallback();
        }
        return result;
    }

}
